#!/bin/bash

# 设置API基础URL
BASE_URL="http://localhost:3001"

# 文本颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 测试计数器
TOTAL_TESTS=0
PASSED_TESTS=0

# 测试函数
test_endpoint() {
    local description=$1
    local command=$2
    local expected_status=$3
    
    echo -e "\n测试: $description"
    echo "执行: $command"
    
    TOTAL_TESTS=$((TOTAL_TESTS + 1))
    
    # 执行命令并获取HTTP状态码
    local response=$(eval "$command")
    local status=$?
    
    if [ $status -eq $expected_status ]; then
        echo -e "${GREEN}✓ 测试通过${NC}"
        echo "响应: $response"
        PASSED_TESTS=$((PASSED_TESTS + 1))
    else
        echo -e "${RED}✗ 测试失败${NC}"
        echo "响应: $response"
    fi
}

echo "开始API测试..."

# 1. 测试获取设计器配置
test_endpoint \
    "获取设计器配置" \
    "curl -s $BASE_URL/api/extension" \
    0

# 2. 测试项目相关API
# 创建项目
test_endpoint \
    "创建测试项目" \
    "curl -s -X PUT -H 'Content-Type: application/json' -d '{\"project\":{\"name\":\"测试项目\",\"description\":\"API测试项目\"}}' $BASE_URL/api/projects/test1" \
    0

# 获取项目
test_endpoint \
    "获取项目信息" \
    "curl -s $BASE_URL/api/projects/test1" \
    0

# 3. 测试文件相关API
# 创建文件
test_endpoint \
    "创建测试文件" \
    "curl -s -X PUT -H 'Content-Type: application/json' -d '{\"content\":\"测试文件内容\"}' $BASE_URL/api/files/test1" \
    0

# 获取文件
test_endpoint \
    "获取文件内容" \
    "curl -s $BASE_URL/api/files/test1" \
    0

# 删除文件
test_endpoint \
    "删除文件" \
    "curl -s -X DELETE $BASE_URL/api/files/test1" \
    0

# 4. 测试历史记录相关API
# 创建历史记录
test_endpoint \
    "创建历史记录" \
    "curl -s -X PUT -H 'Content-Type: application/json' -d '{\"records\":[{\"time\":\"2025-06-19\",\"action\":\"create\"}]}' $BASE_URL/api/history/test1" \
    0

# 获取历史记录
test_endpoint \
    "获取历史记录" \
    "curl -s $BASE_URL/api/history/test1" \
    0

# 删除历史记录
test_endpoint \
    "删除历史记录" \
    "curl -s -X DELETE $BASE_URL/api/history/test1" \
    0

# 5. 测试物料相关API
# 保存物料信息
test_endpoint \
    "保存物料信息" \
    "curl -s -X PUT -H 'Content-Type: application/json' -d '{\"components\":[{\"name\":\"按钮\",\"type\":\"button\"}]}' $BASE_URL/api/materials/test1" \
    0

# 测试结果统计
echo -e "\n测试完成!"
echo "总测试数: $TOTAL_TESTS"
echo "通过测试: $PASSED_TESTS"
echo "失败测试: $((TOTAL_TESTS - PASSED_TESTS))"

# 输出成功率
SUCCESS_RATE=$(( (PASSED_TESTS * 100) / TOTAL_TESTS ))
echo "测试成功率: $SUCCESS_RATE%"

# 根据测试结果设置退出码
if [ $TOTAL_TESTS -eq $PASSED_TESTS ]; then
    exit 0
else
    exit 1
fi
